Clustering এবং Load Balancing হল ওয়েব অ্যাপ্লিকেশন এবং সার্ভার পারফরম্যান্স উন্নত করার জন্য ব্যবহৃত দুটি গুরুত্বপূর্ণ প্রযুক্তি। এগুলি বিশেষভাবে ব্যবহৃত হয় যখন অ্যাপ্লিকেশনগুলির স্কেল বাড়াতে এবং তাদের কর্মক্ষমতা নিশ্চিত করতে হয়। ক্লাস্টারিং এবং লোড ব্যালান্সিং একসাথে কাজ করে যাতে সিস্টেমের অপ্রত্যাশিত ট্রাফিক বা উচ্চ লোডের কারণে পারফরম্যান্স কমে না যায়।
১. Clustering
Clustering হল একটি পদ্ধতি যেখানে একাধিক সার্ভার বা প্রসেস একসাথে কাজ করে এবং একটি সার্ভারের মাধ্যমে ওয়েব অ্যাপ্লিকেশন স্কেল করা হয়। এটি মূলত একাধিক প্রসেস (বা নোড) একসাথে চলতে সহায়তা করে যাতে অ্যাপ্লিকেশন আরও বেশি ট্রাফিক সহ্য করতে পারে এবং তার পারফরম্যান্স বৃদ্ধি পায়। Node.js এ, ক্লাস্টারিং সাধারণত একাধিক কোর প্রসেসরে কাজ করার জন্য ব্যবহৃত হয়।
Clustering in Node.js
Node.js এর cluster module ব্যবহার করে একাধিক কোরে অ্যাপ্লিকেশন চালানো যায়। Node.js সাধারণত একক থ্রেডে চলে, কিন্তু clustering ব্যবহার করে একাধিক থ্রেড চালানো যায়, যা CPU কোরের সর্বোচ্চ ব্যবহার নিশ্চিত করে।
Cluster Setup Example:
- প্রথমে
clusterমডিউল এবংosমডিউল ব্যবহার করতে হবে যাতে সিস্টেমের কোর সংখ্যা জানা যায় এবং তার সাথে একাধিক প্রসেস চালানো যায়। - Node.js Clustering Example:
const cluster = require('cluster');
const http = require('http');
const os = require('os');
const numCPUs = os.cpus().length; // সিস্টেমে কয়টি CPU কোর আছে তা পাওয়া
if (cluster.isMaster) {
// মাস্টার প্রসেস CPU কোরের জন্য worker প্রক্রিয়া তৈরি করবে
console.log(`Master process is running on PID: ${process.pid}`);
// CPU কোরের জন্য worker তৈরি করা
for (let i = 0; i < numCPUs; i++) {
cluster.fork(); // worker প্রসেস তৈরি
}
// Worker প্রসেস যখনই মারা যাবে তখন তাকে পুনরায় তৈরি করা হবে
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died`);
cluster.fork();
});
} else {
// Worker প্রসেস HTTP সার্ভার চালাবে
http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello World');
}).listen(8000);
console.log(`Worker process is running on PID: ${process.pid}`);
}এখানে:
- Master Process: এটি মূল প্রক্রিয়া যা সমস্ত worker প্রসেস পরিচালনা করে।
- Worker Processes: এগুলি নির্দিষ্ট কোরে অ্যাপ্লিকেশন চালায় এবং ক্লায়েন্ট রিকোয়েস্ট প্রসেস করে।
এভাবে clustering ব্যবহার করে আপনি Node.js অ্যাপ্লিকেশনটির পারফরম্যান্স বৃদ্ধি করতে পারেন এবং একাধিক কোরে কাজ করার সুবিধা পান।
২. Load Balancing
Load Balancing হল একটি প্রক্রিয়া যা ইনকামিং ট্রাফিক বা রিকোয়েস্ট গুলোকে একাধিক সার্ভারে ভাগ করে দেয়, যাতে কোনও একটি সার্ভারের উপর অতিরিক্ত লোড না পড়ে এবং সমস্ত সার্ভার সমানভাবে লোড শেয়ার করে কাজ করে। এটি সার্ভারের স্কেলিং এবং পারফরম্যান্স উন্নত করতে সাহায্য করে। লোড ব্যালান্সার সাধারণত ইনকামিং রিকোয়েস্টগুলোকে বিভিন্ন সার্ভারে বিতরণ করে।
Load Balancer Types:
- Hardware Load Balancer: একটি ফিজিক্যাল ডিভাইস যা নেটওয়ার্ক ট্রাফিক ব্যালেন্স করে।
- Software Load Balancer: একটি সফটওয়্যার সলিউশন যা সার্ভারের মধ্যে ট্রাফিক ব্যালেন্স করে। (যেমন Nginx, HAProxy)
Load Balancer Example with Nginx:
Nginx একটি জনপ্রিয় সফটওয়্যার লোড ব্যালান্সার যা ইনকামিং HTTP রিকোয়েস্টগুলিকে একাধিক সার্ভারে ভারসাম্যপূর্ণভাবে বিতরণ করতে ব্যবহৃত হয়।
- Nginx Configuration Example:
Nginx এর কনফিগারেশন ফাইলে একাধিক সার্ভার ব্লক তৈরি করা যায় যা রিকোয়েস্ট গুলো ভারসাম্যপূর্ণভাবে সার্ভারে পাঠায়।
http {
upstream app_servers {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
listen 80;
location / {
proxy_pass http://app_servers; # অ্যাপ সার্ভারগুলির দিকে রিকোয়েস্ট পাঠানো
}
}
}এখানে:
- Upstream: এখানে ৩টি সার্ভার রয়েছে (127.0.0.1:8000, 8001, 8002) যা লোড ব্যালান্সারের মাধ্যমে রিকোয়েস্ট গ্রহণ করবে।
- Proxy Pass: ইনকামিং HTTP রিকোয়েস্ট গুলি ভারসাম্যপূর্ণভাবে এই সার্ভার গুলিতে বিতরণ করা হয়।
Load Balancing Algorithms:
- Round Robin: রিকোয়েস্ট গুলি সার্ভারগুলিতে সমানভাবে বিতরণ করা হয়।
- Least Connections: যেই সার্ভারের কম সংযোগ আছে, সেই সার্ভারে রিকোয়েস্ট পাঠানো হয়।
- IP Hash: ক্লায়েন্টের IP অ্যাড্রেসের ভিত্তিতে রিকোয়েস্ট একটি নির্দিষ্ট সার্ভারে পাঠানো হয়।
৩. Clustering and Load Balancing Together
Clustering এবং Load Balancing একত্রে ব্যবহৃত হয় যখন আপনার অ্যাপ্লিকেশনটি উচ্চ ট্রাফিক এবং স্কেলেবিলিটি প্রয়োজন। Clustering সার্ভারের অভ্যন্তরীণ পারফরম্যান্স উন্নত করে (একাধিক CPU কোরে কাজ করার জন্য), এবং Load Balancing সার্ভারের বাইরের লোড ভারসাম্যপূর্ণভাবে বিতরণ করে।
উদাহরণ: Clustering with Load Balancing
- Clustered Node.js Application: Node.js অ্যাপ্লিকেশন ক্লাস্টারিং ব্যবহার করে একাধিক worker প্রসেসে রান করতে পারে।
- Nginx as Load Balancer: Nginx লোড ব্যালান্সার হিসেবে ব্যবহৃত হয়ে সমস্ত ইনকামিং রিকোয়েস্ট ক্লাস্টারড সার্ভারে ভাগ করে দেয়।
এভাবে, clustering এবং load balancing একসাথে একটি অ্যাপ্লিকেশনকে উচ্চ পরিমাণ ট্রাফিক সামলানোর জন্য কার্যকরীভাবে প্রস্তুত করে।
সারাংশ
- Clustering হল একাধিক সার্ভার বা প্রসেস একসাথে কাজ করার প্রক্রিয়া, যা অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করে এবং একাধিক CPU কোরে অ্যাপ্লিকেশন চালানোর সুবিধা দেয়।
- Load Balancing হল ইনকামিং ট্রাফিক বা রিকোয়েস্ট গুলোকে একাধিক সার্ভারে বিতরণ করার প্রক্রিয়া, যা সার্ভারের উপর অতিরিক্ত লোড কমায় এবং সিস্টেমের পারফরম্যান্স উন্নত করে।
- Clustering এবং Load Balancing একসাথে ব্যবহৃত হয় যখন অ্যাপ্লিকেশনটি উচ্চ স্কেল এবং ট্রাফিক সামলানোর জন্য প্রস্তুত করতে হয়।
Read more